package helper;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.servlet.http.HttpSession;

import model.Benutzer;

/**
 * 
 * @author Sandro
 * 
 */
public class Logging {
	String platzhalter = "<!-- LOG_NEU -->";
	String pfad = "../WEB-INF/";
	// der Inhalt der log-Datei
	String log = "";

	public Logging(String logString1, String logString2, Benutzer benutzer,
			byte logArt) throws IOException {

		if (benutzer != null) {

			System.out.println("Loggen...");

			// Ausgabe des absoluten Pfades
			File hier = new File("");
			System.out.println(hier.getAbsolutePath());

			// wähle, was geloggt werden soll (0=Benutzer,1=Exceptions)
			switch (logArt) {
			case 0:
				// Pfad festlegen
				pfad = pfad + "benutzer.htmlog";
				// String fürs Logging
				logString1 = "<b><i>"
						+ logString2
						+ "</i></b><br><b>Ausf&uuml;hrend (ID): </b>"
						+ benutzer.getId()
						+ "<br><b>Betroffen (ID): </b>"
						+ logString1
						+ "<br><b>Datum: </b>"
						+ new java.text.SimpleDateFormat("dd.MM.yyyy HH:mm:ss")
								.format(new java.util.Date());
				break;
			case 1:
				// Pfad festlegen
				// pfad = pfad + "exceptions.htmlog";
				// String fürs Logging
				// logString1 =
				// "<b><i>"+logString2+"</i></b><br><b>User: </b>"+benutzer.getId()+
				// "<br><b>Exception: </b><small>"
				// + logString1 + "</small><br><b>Datum: </b>"
				// + new java.text.SimpleDateFormat(
				// "dd.MM.yyyy HH:mm:ss")
				// .format(new java.util.Date());
				break;
			default:
				// Pfad festlegen
				// pfad = pfad + "exceptions.htmlog";
			}

			// lesen der bereits vorhandenen log-Datei
			BufferedReader in = null;
			try {
				in = new BufferedReader(new FileReader(pfad));
			} catch (FileNotFoundException e) {
				schreibeBasisDatei();
				try {
					in = new BufferedReader(new FileReader(pfad));
				} catch (FileNotFoundException e1) {
					e1.printStackTrace();
				}
			}
			try {
				String z = "";
				while ((z = in.readLine()) != null) {
					log = log + z;
				}

				// schreiben der Logdatei
				FileWriter fstream;
				fstream = new FileWriter(pfad);
				BufferedWriter out = new BufferedWriter(fstream);

				// Dateiinhalt vorbereiten
				String ausgabe = log.replaceFirst(platzhalter, platzhalter
						+ "\n<tr>\n\t<td>\n\t\t" + logString1
						+ "\n\t</td>\n</tr>");

				// Datei schreiben
				out.write(ausgabe);
				out.close();
				System.out.println("Geloggt.");
			} catch (NullPointerException err) {
				err.printStackTrace();
			}
		}
	}

	private void schreibeBasisDatei() {

		try {
			System.out.println("Basislogdatei schreiben...");

			// erfahre Pfad
			BufferedWriter out = new BufferedWriter(new FileWriter(pfad));

			// Basisinhalt
			String ausgabe = "<table border=\"1\">\n<!-- LOG_NEU -->\n</table>";

			// Datei schreiben
			out.write(ausgabe);

			// Dateizugriff schließen
			out.close();

			System.out.println("Basislogdatei geschrieben.");
		} catch (IOException e) {
			System.err
					.println("Es gab einen Fehler beim Schreiben einer Basis-Loggingdatei:");
			e.printStackTrace();
		}
	}
}
